]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
ibusManager: Avoid double fork triggering parent death in ibus
authororeo639 <oreo6391@gmail.com>
Mon, 27 Jun 2022 20:38:55 +0000 (13:38 -0700)
committerFlorian Müllner <fmuellner@gnome.org>
Sat, 2 Jul 2022 11:04:43 +0000 (11:04 +0000)
Use DO_NOT_REAP_CHILD to avoid a double-fork internally since ibus-daemon
refuses to start with init as its parent.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2345>

js/misc/ibusManager.js

index 420459b769323129b76fce1ee4c50ae197f449f0..8bcfb3674109933a53db5186a4f9ad0402f34bff 100644 (file)
@@ -109,9 +109,11 @@ var IBusManager = class {
             this._tryAppendEnv(env, 'COMPOSE_FILE');
             this._tryAppendEnv(env, 'DISPLAY');
 
-            GLib.spawn_async(
+            // Use DO_NOT_REAP_CHILD to avoid adouble-fork internally
+            // since ibus-daemon refuses to start with init as its parent.
+            const [success_, pid] = GLib.spawn_async(
                 null, cmdLine, env,
-                GLib.SpawnFlags.SEARCH_PATH,
+                GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD,
                 () => {
                     try {
                         global.context.restore_rlimit_nofile();
@@ -119,6 +121,11 @@ var IBusManager = class {
                     }
                 }
             );
+            GLib.child_watch_add(
+                GLib.PRIORITY_DEFAULT,
+                pid,
+                () => GLib.spawn_close_pid(pid)
+            );
         } catch (e) {
             log(`Failed to launch ibus-daemon: ${e.message}`);
         }